iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
Mobile Development

IOS的打怪升級之路系列 第 24

鐵人賽第二十四天 天氣API(三) 解析API

  • 分享至 

  • xImage
  •  

說明

在請求資料時,收到的資料大多遵循 JSON 格式,因此我們需要將其轉換為其他格式,方便程式讀取與使用。/images/emoticon/emoticon07.gif

實做

取得API回傳的資料

取得 API 回傳的資料
API 網站 中找到 36 小時預報的 API,並輸入授權碼。
https://ithelp.ithome.com.tw/upload/images/20241002/20168187zlEPsfOVqk.png
按下 Execute 按鈕後,會得到回傳的 JSON 資料範例,依照這些資料來創建相對應的變數。
https://ithelp.ithome.com.tw/upload/images/20241002/20168187tV5kBLWwA7.png
https://ithelp.ithome.com.tw/upload/images/20241002/20168187gUXzlckHnv.png
我們可以將回傳的 JSON 資料複製到具有格式整理功能的網站或軟體上,例如 json.parser.online.fr。
https://ithelp.ithome.com.tw/upload/images/20241002/20168187YTmvw61LHd.png

建立結構

使用該網站查看 JSON 資料的最上層結構,然後依照結構建立相對應的 Swift 結構體。每個層次的資料可能是基本資料型別,也可能是 struct,這時需要繼續細分。
https://ithelp.ithome.com.tw/upload/images/20241002/20168187nLY4lK4t0h.png

第一步:建立最上層結構

struct weatherData: Codable {

    var success: String

    var result: resultValue

    var records: recordsValue
}

第二步:設定 result 的結構

struct resultValue: Codable {

    var resource_id: String

    var fields: [fieldsValue]

}

持續依序建立
依照每一層結構,逐步解析。

結語

透過逐層分析 JSON 資料並建立相對應的 Swift 結構,這樣的步驟可以有效地整理資料,為接下來的資料解析奠定基礎。以下為完整程式用來除錯。

import Foundation
import CoreText

struct weatherData: Codable {

    var success: String

    var result: resultValue

    var records: recordsValue
}

struct resultValue: Codable {

    var resource_id: String

    var fields: [fieldsValue]

}
struct fieldsValue: Codable {

    var id: String

    var type: String
}
struct recordsValue: Codable {

    var datasetDescription: String

    var location: [locationValue]
}
struct locationValue: Codable {
    var locationName: String
    var weatherElement: [weatherElementValue]
}
struct weatherElementValue: Codable {
    var elementName: String

    var time: [timeValue]
}
struct timeValue: Codable {
    var startTime: String
    var endTime: String
    var parameter: ParameterValue
}
struct ParameterValue: Codable {

    var parameterName: String

    var parameterUnit: String?

    var parameterValue: String?

}
```![/images/emoticon/emoticon08.gif](/images/emoticon/emoticon08.gif)

上一篇
鐵人賽第二十三天 天氣API(二) 創建UI
下一篇
鐵人賽第二十五天 天氣API(四) 請求資料
系列文
IOS的打怪升級之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言